package simulador;

import java.io.File;
import java.util.*;
import jxl.Sheet;
import jxl.Workbook;

public class Parametros {

    public final static String ARCHIVO_PARAMETROS = "C://Parametros_FastShip.xls";
    public final static int FILA_INICIO_CIUDADES = 6;
    public final static int COL_INICIO_CIUDADES = 0;
    public final static int FILA_INICIO_DURACIONES = 56;
    public final static int COL_INICIO_DURACIONES_MIN = 2;
    public final static int COL_INICIO_DURACIONES_MAX = 10;
    public final static int NUM_CIUDADES_X_CONTINENTE = 14;
    private ArrayList<Ciudad> sudamerica;
    private ArrayList<Ciudad> norteamerica;
    private ArrayList<Ciudad> europa;
    private ArrayList<Ciudad> asia;
    private ArrayList<Ciudad> ciudades;
    private ArrayList<Almacen> almacenes;
    private int[][] duracionesMinimas = new int[4][4];
    private int[][] duracionesMaximas = new int[4][4];

    public int[][] getDuracionesMinimas() {
        return duracionesMinimas;
    }

    public void setDuracionesMinimas(int[][] duracionesMinimas) {
        this.duracionesMinimas = duracionesMinimas;
    }

    public int[][] getDuracionesMaximas() {
        return duracionesMaximas;
    }

    public void setDuracionesMaximas(int[][] duracionesMaximas) {
        this.duracionesMaximas = duracionesMaximas;
    }

    public ArrayList<Ciudad> getCiudades() {
        return ciudades;
    }

    public void setCiudades(ArrayList<Ciudad> ciudades) {
        this.ciudades = ciudades;
    }

    public ArrayList<Almacen> getAlmacenes() {
        return almacenes;
    }

    public void setAlmacenes(ArrayList<Almacen> almacenes) {
        this.almacenes = almacenes;
    }

    public Parametros() {
        sudamerica = new ArrayList<Ciudad>();
        norteamerica = new ArrayList<Ciudad>();
        europa = new ArrayList<Ciudad>();
        asia = new ArrayList<Ciudad>();
        ciudades = new ArrayList<Ciudad>();
        almacenes = new ArrayList<Almacen>();
    }

    public Parametros(ArrayList<Ciudad> sudamerica, ArrayList<Ciudad> norteamerica, ArrayList<Ciudad> europa, ArrayList<Ciudad> asia) {
        this.sudamerica = sudamerica;
        this.norteamerica = norteamerica;
        this.europa = europa;
        this.asia = asia;
    }

    public ArrayList<Ciudad> getSudamerica() {
        return sudamerica;
    }

    public void setSudamerica(ArrayList<Ciudad> sudamerica) {
        this.sudamerica = sudamerica;
    }

    public ArrayList<Ciudad> getNorteamerica() {
        return norteamerica;
    }

    public void setNorteamerica(ArrayList<Ciudad> norteamerica) {
        this.norteamerica = norteamerica;
    }

    public ArrayList<Ciudad> getEuropa() {
        return europa;
    }

    public void setEuropa(ArrayList<Ciudad> europa) {
        this.europa = europa;
    }

    public ArrayList<Ciudad> getAsia() {
        return asia;
    }

    public void setAsia(ArrayList<Ciudad> asia) {
        this.asia = asia;
    }

    public void leerParametros() {
        try {
            Workbook archivoExcel = Workbook.getWorkbook(new File(ARCHIVO_PARAMETROS));
            Sheet hoja = archivoExcel.getSheet(0);
            String numContinentes = hoja.getCell(3, 1).getContents();
            String numCiudadesXContinente = hoja.getCell(3, 2).getContents();

            leeDatosDeUnaCiudad(hoja, sudamerica, FILA_INICIO_CIUDADES, COL_INICIO_CIUDADES);
            leeDatosDeUnaCiudad(hoja, norteamerica, FILA_INICIO_CIUDADES, COL_INICIO_CIUDADES + 10);
            leeDatosDeUnaCiudad(hoja, europa, FILA_INICIO_CIUDADES + 24, COL_INICIO_CIUDADES);
            leeDatosDeUnaCiudad(hoja, asia, FILA_INICIO_CIUDADES + 24, COL_INICIO_CIUDADES + 10);

            ciudades.addAll(sudamerica);
            ciudades.addAll(norteamerica);
            ciudades.addAll(europa);
            ciudades.addAll(asia);

            //  lee duraciones minimas
            for (int fil = FILA_INICIO_DURACIONES; fil < FILA_INICIO_DURACIONES + 4; fil++) {
                for (int col = COL_INICIO_DURACIONES_MIN; col < COL_INICIO_DURACIONES_MIN + 4; col++) {
                    duracionesMinimas[fil - FILA_INICIO_DURACIONES][col - COL_INICIO_DURACIONES_MIN] = Integer.parseInt(hoja.getCell(col, fil).getContents());
                    System.out.println("FIL " + fil + "  COL " + col + " :  " + duracionesMinimas[fil - FILA_INICIO_DURACIONES][col - COL_INICIO_DURACIONES_MIN]);
                }
            }

            // lee duraciones maximas
            for (int fil = FILA_INICIO_DURACIONES; fil < FILA_INICIO_DURACIONES + 4; fil++) {
                for (int col = COL_INICIO_DURACIONES_MAX; col < COL_INICIO_DURACIONES_MAX + 4; col++) {
                    duracionesMaximas[fil - FILA_INICIO_DURACIONES][col - COL_INICIO_DURACIONES_MAX] = Integer.parseInt(hoja.getCell(col, fil).getContents());
                    System.out.println("FIL " + fil + "  COL " + col + " :  " + duracionesMaximas[fil - FILA_INICIO_DURACIONES][col - COL_INICIO_DURACIONES_MAX]);
                }
            }

        } catch (Exception ioe) {
            ioe.printStackTrace();
        }
    }

    private void leeDatosDeUnaCiudad(Sheet hoja, ArrayList<Ciudad> continente, int filaInicio, int columnaInicio) {
        for (int fil = filaInicio; fil < filaInicio + NUM_CIUDADES_X_CONTINENTE; fil++) {
            int col = columnaInicio;
            String  codigo = hoja.getCell(col++, fil).getContents();
            String siglas = hoja.getCell(col++, fil).getContents();
            String nombre = hoja.getCell(col++, fil).getContents();
            String conti = hoja.getCell(col++, fil).getContents();
            int capCarga = Integer.parseInt(hoja.getCell(col++, fil).getContents());
            int capDispo = Integer.parseInt(hoja.getCell(col++, fil).getContents());
            String estado = hoja.getCell(col++, fil).getContents();
            int costo = Integer.parseInt(hoja.getCell(col++, fil).getContents());
            Ciudad ciudad = new Ciudad(codigo, siglas, nombre, conti, costo);
            Almacen almacen = new Almacen(codigo, ciudad, capCarga, capDispo, estado, costo);
            continente.add(ciudad);
            almacenes.add(almacen);
            System.out.println(ciudad);
            System.out.println(almacen);

        }
    }
}
